UMOUNT(2) | Linux Programmer's Manual | UMOUNT(2) |
名前¶
umount, umount2 - ファイルシステムをアンマウントする
書式¶
#include <sys/mount.h> int umount(const char *target); int umount2(const char *target, int flags);
説明¶
umount() と umount2() は target にマウントされている (最上位の) ファイルシステムを外す。
ファイルシステムのアンマウントを行うには、 適切な権限 (Linux では CAP_SYS_ADMIN ケーパビリティ) が必要である。
Linux 2.1.116 から、 umount2() システムコールが追加された。これは umount() と同様に target をアンマウントするが、 flags が追加されており、操作時の振る舞いを制御できる。
- MNT_FORCE (2.1.116 以降)
- 使用中 (busy) でも強制的にアンマウントを実行する。 これを行うとデータを失う可能性がある。 (NFS マウント専用)
- MNT_DETACH (2.4.11 以降)
- 遅延アンマウントを行う。マウントポイントに対する新規のアクセスは 不可能となり、実際のアンマウントはマウントポイントがビジーで なくなった時点で行う。
- MNT_EXPIRE (Linux 2.6.8 以降)
- マウントポイントに期限切れの印をつける。 マウントポイントが現在使用中でない場合、このフラグをつけて umount2() を初めて呼び出すと EAGAIN エラーで失敗するが、マウントポイントには期限切れ (expire) の印がつけられる。 そのマウントポイントはいずれかのプロセスがアクセスしない限り 期限切れの印がついたままとなる。 もう一度 MNT_EXPIRE をつけて umount2() を呼び出すと、期限切れの印のついたマウントポイントが アンマウントされる。 このフラグを MNT_FORCE もしくは MNT_DETACH と同時に指定することはできない。
返り値¶
成功した場合 0 が返る。 エラーの場合、-1 が返り、 errno がエラーの内容にしたがって設定される。
エラー¶
以下に示すエラーは、ファイルシステムに依存しないものである。 それぞれのファイルシステムタイプには固有のエラーが存在する場合があり、 独自の動作をすることもある。詳しくはカーネルのソースを見て欲しい。
- EAGAIN
- MNT_EXPIRE を指定した umount2() の呼び出しで、正常に未使用のファイルシステムに期限切れの印を つけることができた。
- EBUSY
- 使用中 (busy) のため、 target をアンマウントできなかった。
- EFAULT
- target がユーザアドレス空間の外を指している。
- EINVAL
- target がマウントポイントではない。 または、 umount2() で、 MNT_EXPIRE が指定された umount2() で、 MNT_DETACH か MNT_FORCE が同時に指定された。
- ENAMETOOLONG
- パス名の長さが MAXPATHLEN より長かった。
- ENOENT
- パス名が空である。もしくは指定されたパスが存在しない。
- ENOMEM
- カーネルがファイル名やデータをコピーするための空きページを確保できなかった。
- EPERM
- 呼び出し元が必要な権限を持っていない。
準拠¶
この関数は Linux 固有の関数であり、移植を考慮したプログラムでは 使用すべきでない。
注意¶
元々の umount() 関数は umount(device) の形で呼び出され、 ブロックデバイス以外を指定して呼び出すと ENOTBLK を返した。 Linux 0.98p4 で、無名デバイス (anonymous device) に対応するために umount(dir) の形での呼び出しが加えられた。 Linux 2.3.99-pre7 で、umount(device) は削除され、 umount(dir) だけが残された (一つのデバイスを複数の位置にマウント出来るようになったため、 デバイスを指定しただけでは不十分だからである)。
関連項目¶
2008-10-06 | Linux |